#include "sessiondetailwidget.h"
#include "debug.h"
#include "choosefrienddialog.h"
// #include "model/datacenter.h"

#include <QVBoxLayout>
#include <QPushButton>
#include <QFontMetrics>
#include <QMessageBox>

//////////////////////////////////////////////////////////////
/// 组合控件：头像 + 名字
//////////////////////////////////////////////////////////////

AvatarItem::AvatarItem(const QIcon &avatar, const QString &name)
{
    // 1. 设置AvatarItem自身的属性
    this->setFixedSize(70, 80);

    // 2. 创建布局管理器
    QVBoxLayout* layout = new QVBoxLayout();
    layout->setSpacing(0);
    layout->setContentsMargins(0, 0, 0, 0);
    layout->setAlignment(Qt::AlignHCenter); // 水平居中
    this->setLayout(layout); // 添加布局管理器到设置AvatarItem

    // 3. 创建头像
    avatarBtn = new QPushButton();
    avatarBtn->setFixedSize(45, 45);
    avatarBtn->setIconSize(QSize(45, 45));
    avatarBtn->setIcon(avatar);
    avatarBtn->setStyleSheet("QPushButton { border: none; border-radius: 5px; }");

    // 4. 创建名字
    QFont font("微软雅黑", 12);
    nameLabel = new QLabel();
    nameLabel->setText(name);
    nameLabel->setFont(font);
    nameLabel->setAlignment(Qt::AlignCenter);

    // 5. 对名字做 "截断操作"
    // 传入字体-确认单个字符的宽度
    // 传入字符串name，确认字符串在一行情况下的宽度
    // 当实际单行宽度小于最大单行宽度时，触发截断操作
    // 截断操作如下：
    //    计算截断字符串"..."的水平宽度
    //    可用字符串的宽度为 最大宽度 - 阶段字符串宽度
    //    计算可用字符串的宽度的字符数
    //    完整的阶段后的字符串为 可用字符串的宽度的字符数构成的子串 拼接 截断字符串
    const int MAX_WIDTH = 65;
    QFontMetrics metrics(font);
    int totalWidth = metrics.horizontalAdvance(name);
    if (totalWidth >= MAX_WIDTH) {
        // 需要截断
        QString tail = "...";
        int tailWidth = metrics.horizontalAdvance(tail);
        int availableWidth = MAX_WIDTH - tailWidth;
        int availableSize = name.size() * ((double)availableWidth / totalWidth);
        QString newName = name.left(availableSize);
        nameLabel->setText(newName + tail);
    }

    // 6. 将控件添加到布局管理器
    layout->addWidget(avatarBtn);
    layout->addWidget(nameLabel);
}


///////////////////////////////////////////////////////////////
/// 单聊会话详情页窗口
///////////////////////////////////////////////////////////////

SessionDetailWidget::SessionDetailWidget(QWidget *parent, const model::UserInfo &userInfo)
    : QDialog(parent)
    , userInfo(userInfo)
{
    // 1. 设置 SessionDetailWidget 自身基本属性
    this->setWindowTitle("会话详情");
    this->setWindowIcon(QIcon(":/resource/image/logo.png"));
    this->setFixedSize(300, 300);
    this->setStyleSheet("QWidget { background-color: rgb(255, 255, 255); }");
    this->setAttribute(Qt::WA_DeleteOnClose);

    // 2. 创建并设置布局管理器到 SessionDetailWidget
    QGridLayout* layout = new QGridLayout();
    layout->setSpacing(10);
    layout->setContentsMargins(50, 0, 50, 0);
    this->setLayout(layout);

    // 3. 创建并设置 创建群聊 到 layout
    AvatarItem* createGroupBtn = new AvatarItem(QIcon(":/resource/image/cross.png"), "添加");
    layout->addWidget(createGroupBtn, 0, 0);

    // 4. 添加当前用户的信息
#if TEST_UI
    // 构造用于测试UI的临时数据
    AvatarItem* currentUser = new AvatarItem(QIcon(":/resource/image/defaultAvatar.png"), "张三123456");
    layout->addWidget(currentUser, 0, 1);
#else
    AvatarItem* currentUser = new AvatarItem(userInfo.avatar, userInfo.nickname);
    layout->addWidget(currentUser, 0, 1);
#endif

    // 5. 添加 "删除好友" 按钮
    deleteFriendBtn = new QPushButton();
    deleteFriendBtn->setFixedHeight(50);
    deleteFriendBtn->setText("删除好友");
    QString style = "QPushButton { border: 1px solid rgb(90, 90, 90); border-radius: 5px; } ";
    style += "QPushButton:pressed { background-color: rgb(235, 235, 235); }";
    deleteFriendBtn->setStyleSheet(style);
    layout->addWidget(deleteFriendBtn, 1, 0, 1, 3);

    // 6. 添加信号槽
    // 6.1 创建群聊 按钮
    connect(createGroupBtn->getAvatar(), &QPushButton::clicked, this, &SessionDetailWidget::clickCreateGroupBtn);
    // 6.2 删除好友按钮
    connect(deleteFriendBtn, &QPushButton::clicked, this, &SessionDetailWidget::clickDeleteFriendBtn);
}

void SessionDetailWidget::clickCreateGroupBtn()
{
    ChooseFriendDialog* chooseFriendDialog = new ChooseFriendDialog(this, userInfo.userId);
    chooseFriendDialog->exec();
}

void SessionDetailWidget::clickDeleteFriendBtn()
{
    // 1. 弹出一个对话框让用户确认是否真的要删除
    auto result = QMessageBox::warning(this, "确认删除", "确认删除该好友?", QMessageBox::Ok | QMessageBox::Cancel);

    if (result != QMessageBox::Ok)
    {
        LOG() << "用户取消了好友删除";
        return;
    }

    // 2. 发送好友删除的请求 TODO???
    // DataCenter* dataCenter = DataCenter::getInstance();
    // dataCenter->deleteFriendAsync(this->userInfo.userId);

    // 3. 关闭当前窗口
    this->close();
}
